/* 
 * File:   VulnerabilidadService.h
 * Author: max
 *
 * Created on October 22, 2012, 4:58 AM
 */

#ifndef VULNERABILIDADSERVICE_H
#define	VULNERABILIDADSERVICE_H

#include <iostream>
#include <pthread.h>
#include <fstream>
#include <map>
#include <vector>
#include "server_IMensajero.h"
#include "server_IMensajeEntranteManejador.h"

using namespace std;
using namespace TP::Comunicacion;
using namespace TP::Comunicacion::Eventos;

namespace TP { namespace Servicios {

    class VulnerabilidadService : public IMensajeEntranteManejador {

    public:

        VulnerabilidadService( const string& pVulnerabilidadesDataPath, const string& pVulnerabilidadesDefinicionesDataPath );

        virtual ~VulnerabilidadService();
        
        void Iniciar() throw (Excepcion&);
        
        void Finalizar() throw (Excepcion&);
        
        void listarVulnerabilidades (IMensajero* pMensajero, vector<string>& pComando);
        
        void listarVulnerabilidadesPorHost(IMensajero* pMensajero, vector<string>& pComando);
        
        void agregarVulnerabilidadAHost(IMensajero* pMensajero, vector<string>& pComando);
        
        void removerVulnerabilidadAHost(IMensajero* pMensajero, vector<string>& pComando);        
        
        void mensajeEntranteManejador (IMensajero* pMensajero, const string& pMensaje);

    private:
        
        string vulnerabilidadesPath;
        string vulnerabilidadesDefinicionesPath;
        map <string, string> vulnerabilidades;  // Colecciond e vulnerabilidades detectadas.
        map <string, string> vulnerabilidadesDefiniciones; // Colección de definición de vulnerabilidades.
        pthread_mutex_t mutex;

        bool ipValida (const string& pIp);
    };

}}

#endif	/* VULNERABILIDADSERVICE_H */

